import { ref } from 'vue'

// 用户角色和权限映射（从后端获取）
export const ROLE_PERMISSIONS = {}

// 当前用户信息
const currentUser = ref(null)

// 初始化用户信息
export function initUser() {
  const userInfoStr = localStorage.getItem('userInfo')
  if (userInfoStr) {
    try {
      const userInfo = JSON.parse(userInfoStr)
      // 确保roles字段存在且为数组
      if (!userInfo.roles || !Array.isArray(userInfo.roles)) {
        userInfo.roles = []
      }
      // 确保permissions字段存在且为数组，但如果已存在则不覆盖
      if (!userInfo.hasOwnProperty('permissions')) {
        userInfo.permissions = []
      } else if (!Array.isArray(userInfo.permissions)) {
        userInfo.permissions = []
      }
      // 确保avatar字段存在
      if (!userInfo.hasOwnProperty('avatar')) {
        userInfo.avatar = ''
      }
      currentUser.value = userInfo
    } catch (e) {
      console.error('Failed to parse user info:', e)
      currentUser.value = null
    }
  } else {
    currentUser.value = null
  }
}

// 获取当前用户信息
export function getCurrentUser() {
  // 如果内存中没有用户信息，尝试从localStorage获取
  if (!currentUser.value) {
    const userInfoStr = localStorage.getItem('userInfo')
    if (userInfoStr) {
      try {
        const userInfo = JSON.parse(userInfoStr)
        // 确保roles字段存在且为数组
        if (!userInfo.roles || !Array.isArray(userInfo.roles)) {
          userInfo.roles = []
        }
        // 确保permissions字段存在且为数组
        if (!userInfo.hasOwnProperty('permissions')) {
          userInfo.permissions = []
        } else if (!Array.isArray(userInfo.permissions)) {
          userInfo.permissions = []
        }
        // 确保avatar字段存在
        if (!userInfo.hasOwnProperty('avatar')) {
          userInfo.avatar = ''
        }
        currentUser.value = userInfo
        return currentUser.value
      } catch (e) {
        console.error('Failed to parse user info from localStorage:', e)
        return null
      }
    }
  }
  return currentUser.value
}

// 获取当前用户角色
export function getCurrentUserRoles() {
  if (!currentUser.value || !currentUser.value.roles) {
    return []
  }
  return currentUser.value.roles
}

// 检查用户是否具有指定角色
export function hasRole(role) {
  const roles = getCurrentUserRoles()
  return roles.includes(role)
}

// 从后端获取用户权限
let userPermissions = []

// 设置用户权限
export function setUserPermissions(permissions) {
  userPermissions = permissions
}

// 检查用户是否具有指定权限
export function hasPermission(permission) {
  // 如果currentUser.value存在且有permissions字段，直接检查
  if (currentUser.value && currentUser.value.permissions) {
    const hasPerm = currentUser.value.permissions.includes(permission)
    return hasPerm
  }
  
  // 否则使用userPermissions变量检查，确保userPermissions是数组
  if (Array.isArray(userPermissions)) {
    const hasPerm = userPermissions.includes(permission)
    return hasPerm
  }
  
  // 如果都没有权限信息，返回false
  return false
}

// 测试函数：手动设置用户权限（仅用于测试）
export function testSetUserPermissions(permissions) {
  if (currentUser.value) {
    currentUser.value.permissions = permissions
  }
}

// 测试函数：检查localStorage中的用户信息
export function testCheckLocalStorage() {
  const userInfoStr = localStorage.getItem('userInfo')
  if (userInfoStr) {
    try {
      const userInfo = JSON.parse(userInfoStr)
      return userInfo
    } catch (e) {
      console.error('Failed to parse userInfo from localStorage:', e)
      return null
    }
  }
  return null
}

// 检查用户是否具有指定的任一角色
export function hasAnyRole(roles) {
  for (const role of roles) {
    if (hasRole(role)) {
      return true
    }
  }
  return false
}

// 检查用户是否具有指定的任一权限
export function hasAnyPermission(permissions) {
  for (const permission of permissions) {
    if (hasPermission(permission)) {
      return true
    }
  }
  return false
}

// 初始化用户信息
initUser()